package com.winner.monitor_pattern;


/**
 *  监听者模式 也叫事件监听模式   spring使用的监听者模式 Spring ApplicationListener 是Spring事件机制的一部分,与ApplicationEvent抽象类结合完成ApplicationContext的事件通知机制.
 *  https://blog.csdn.net/u010963948/article/details/83507185
 *  23种设计模式里没有监听者模式, 因为监听者模式 是观察者模式的升级版
 *  不过Spring中已经存在了一个升级版观察者模式的机制，这就是监听者模式。通过该机制我们就可以发送接收任意的事件并处理
 *  https://blog.csdn.net/qq_32252957/article/details/82763848
 *
 *  观察者模式和监听者模式 是一样的，使用的关键在搞清楚什么是观察者、什么是被观察者
 *  观察者(Observer)相当于事件监听器。有个微博模型比较理解(典型的订阅和发布模式)，
 *  A用户关注B用户，则A是B的观察者，B是一个被观察者，一旦B发表任何言论，A便可以获得
 *  被观察者(Observable)相当于事件源和事件，执行事件源通知逻辑时，将会回调Observer的回调方法update()
 *
 */
public class Main {
    public static void main(String[] args) {
        EventSource eventSource = new EventSource(); // 事件源
        // 添加具体事件监听器 此处我只新建了一个具体的事件监听器new MonitorListenerImpl() 你可以新建多个
        eventSource.addListener(new MonitorListenerImpl());
        /*
         * 传入openWindows事件，通知所有的事件监听器
         * 对open事件感兴趣的listener将会执行
         */
        eventSource.notifyListenerEvents(new PrintEvent("openWindows"));  // 通知所有的监听器
//        打印结果:
//        通知一个事件源 source: openWindows
//        doOpen
    }
}
